'''
ATM存取款机模拟系统
1. 存款信息数据源
2. 查询余额信息
3. 存款
4. 取款
5. 改密码
6. 退出系统
7. 交互界面
8. 账号密码验证
'''

User_id = ''  # 定义全局变量作为银行卡账号ID

# 1.存款信息数据源

# 列表里面以数据字典的方式存放用户的银行数据: 账号，密码，金额
# 练习用，系统退出后更改的信息会丢失
Cash_Data = [
    {'ID':'123', 'Name':'Tomy', 'PW':'123', 'Cash_Num':10000},
    {'ID':'234', 'Name':'Jhon', 'PW':'234', 'Cash_Num':11000},
    {'ID':'345', 'Name':'Lucy', 'PW':'345', 'Cash_Num':12000}
]

# 2.查询余额信息
def display_cash_info (ID) :

    print('| {0:<10}| {1:<8}| {2:<10}|'.format('银行卡ID', '姓名', '余额'))   # 显示表头
    print('-' * 40)   # 分隔符

    for Cash_Entry in Cash_Data:
        if ID == Cash_Entry['ID'] :    # 根据银行卡ID显示相应用户的信息
            print('| {0:<10}| {1:<8}| {2:<10}|'.format(Cash_Entry['ID'], Cash_Entry['Name'], Cash_Entry['Cash_Num']))

# 3.存款
def add_Cash (ID, Cash_Value) :
    for Cash_Entry in Cash_Data:
        if ID == Cash_Entry['ID']:   # 根据银行卡ID更新相应用户的余额信息
            Cash_Entry['Cash_Num'] = Cash_Entry['Cash_Num'] + Cash_Value
            print('成功存款：{0}元，'.format(Cash_Value))      # 提示存款金额
            print('当前余额：{0}元。'.format(Cash_Entry['Cash_Num']))   # 提示余额
            print('详细列表：')      # 显示详细列表
            display_cash_info(ID)    # 任务执行完后，显示账户信息

# 4.取款
def del_Cash (ID, Cash_Value) :
    for Cash_Entry in Cash_Data:
        if ID == Cash_Entry['ID']:  # 根据银行卡ID更新相应用户的余额信息
            Cash_Entry['Cash_Num'] = Cash_Entry['Cash_Num'] - Cash_Value
            print('取款成功：{0}元，'.format(Cash_Value))     # 提示取款金额
            print('当前余额：{0}元。'.format(Cash_Entry['Cash_Num']))  # 提示余额
            print('详细列表：')   # 显示详细列表
            display_cash_info(ID)   # 任务执行完后，显示账户信息


# 5.改密码
def chg_Pw (ID, now_pw, new_pw) :
    Chg_flag = 0       # 定义一个flag, 初始值0
    for Cash_Entry in Cash_Data:
        if ID == Cash_Entry['ID']:    # 循环定位相应账户，更新密码
            if Cash_Entry['PW'] == now_pw :
                Cash_Entry['PW'] = new_pw  # 更新密码
                Chg_flag = 1   # 发生密码变更后，flag更改为1

    if Chg_flag == 0:  # flag没有改变说明没有找到相应账户密码，提示任务失败
        print('输入的当前密码无效，任务结束')
    else:
        print('密码变更成功！')


# 6.退出系统
# def Logout ()
# 无需coding


# 7.界面和交互
def Exchange_info(Bank_ID) :

    # 初始页面2 ,列出任务列表
    print('')
    print('')
    print('='*10,'ATM存取款模拟系统','='*10)
    print('{:1} {:15} {:15}'.format(' ', '1.查询余额', '2.存款业务'))
    print('{:1} {:15} {:15}'.format(' ', '3.取款业务', '4.安全退出'))
    print('{:1} {:15}'.format(' ', '5.修改密码'))
    print('='*40)
    key=input('请输入您要办理的业务编号：')

    # 根据交互的业务编号key值，执行相应的task

    if key == "1" :
        print('=' * 20, '查询余额', '=' * 20)
        display_cash_info(Bank_ID)   # 执行显示余额
        input('按回车键继续')
        Exchange_info(Bank_ID)  # 回到任务列表

    elif key == "2" :
        print('=' * 20, '存款', '=' * 20)
        cash_vale=input('请输入存款金额：')
        add_Cash(Bank_ID,int(cash_vale))    # 执行存款任务
        input('按回车键继续')
        Exchange_info(Bank_ID)  # 回到任务列表

    elif key == "3" :
        print('=' * 20, '取款', '=' * 20)
        cash_vale = input('请输入取款金额：')
        del_Cash(Bank_ID,int(cash_vale))    # 执行取款任务
        input('按回车键继续')
        Exchange_info(Bank_ID)  # 回到任务列表


    elif key == "5" :
        print('=' * 18, '变更密码', '=' * 18)
        now_pw = input('请输入当前密码：')
        new_pw = input('请输入新的密码：')
        chg_Pw(Bank_ID,now_pw,new_pw)   # 执行变更密码任务
        input('按回车键继续')
        Exchange_info(Bank_ID)  # 回到任务列表

    elif key == "4":
        #loginOut()
        print('=' * 20, '再见', '=' * 20)  # 退出程序时，只打印 再见，不返回程序列表

    else :
        input('无效选项，请按回车键 重新选择任务')
        Exchange_info(Bank_ID)   # 回到任务列表

  #  Exchange_info(Bank_ID)

# 8.账号密码验证
    # 初始页面1
def Auth_IDPW ():
    global User_id
    Input_id = input('请输入银行卡号：')
    Input_pw = input('请输入银行密码：')
    for Cash_Entry in Cash_Data:
        if Input_id == Cash_Entry['ID']:
            if Input_pw == Cash_Entry['PW'] :
                User_id = Input_id
    if User_id == '':
        print('账号或密码无效，请重新输入')
        Auth_IDPW ()
    else:
        print('账号或密码ok')
        Exchange_info(User_id)


# 验证/启动程序
Auth_IDPW ()


